package 算法.leetcode.str;

import org.junit.Test;

import java.util.HashMap;

/**
 * @author lchenglong
 * @date 2020/12/1
 */
public class LengthOfLongestSubstring {

    /**
     * 给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
     */
    @Test
    public void test() {
        String str = "pwwkew";
        System.out.println(lengthOfLongestSubstring(str));
    }

    public int lengthOfLongestSubstring(String s) {
        int length = s.length();
        int max = 0;
        if (length <=1){
            return length;
        }
        //ASSIC码一共128个 故定义128
        HashMap<Character,Integer> map = new HashMap(128);
        int start = -1,end = 0;
        for (;end<length;end++) {
            Character c = s.charAt(end);
            Integer oldIndex = map.put(c, end);
            // 如果oldIndex不为空，说明原来的已经存在这个元素了
            if (null != oldIndex) {
                // 取原来的滑动窗口的起始位置和与当前元素相同的位置较为靠后的那个作为滑动窗口的起始位置
                start = Math.max(start,oldIndex);
            }
            //计算滑动窗口的大小
            max = Math.max(max,end-start);
        }
        return max;
    }
}
